#include <iostream>
#include <string>
#include <cstring>

using namespace std;


/*
常成员函数
    格式 void func() const
    功能 在常成员函数中 不能修改 成员变量的值 除非 这个值使用了 mutable 修饰

常对象：
    格式  cosnt 类 类名
    功能 只能调用 类中的常成员函数

*/

class My_string
{
private:
    mutable int len; // 加了 mutable 的修饰符 在常成员函数中可以修改
    char str[128];
public:
    My_string() {}

    My_string(const char * str)
    {
        strcpy(this->str , str);
        len = strlen(str);
    }

    void show()
    {
        
        len = 99; // 加了 mutable 可以修改常成员函数中的 成员变量
        cout << this->str << endl;
        cout << len << endl;
    }

    /*
        写一个 字符串拷贝函数 
            对方的为目标字符串
            自己的为源字符串
        将源字符串  --> 目标字符串
    */
   // 常成员函数
    void my_strcpy(My_string & M_str) const
    {
        strcpy(M_str.str , this->str);
    }

};


int main(int argc, char const *argv[])
{
    My_string str_1("张三");
    My_string str_2("李四");
    str_1.show();
    str_2.show();

    str_1.my_strcpy(str_2);

    str_1.show();
    str_2.show();

    // 常对象
    const My_string str_3("王五");
    str_3.my_strcpy(str_1); // 常对象只能调用 常成员函数

    return 0;
}